"""
    1、任务的本质就是函数
    2、这个函数必须要被celery的实例对象的task装饰器装饰
    3、必须让调用celery实例对象的自动监测方法来检测任务
"""
from apps.verifications.constants import SMS_CODE_EXPIRE_TIME
from libs.yuntongxun.sms import CCP
from celery_tasks.main import app


@app.task(bind=True, default_retry_delay=10)
def send_sms_code(self, mobile, sms_code, ):
    # 6、再发送短信
    # 参数1：给谁发
    # 参数2：【云通讯】您使用的是云通讯短信模板，您的验证码是{1}，请于{2}分钟内正确输入
    # 参数3：使用的模板，测试默认用1
    try:
        result = CCP().send_template_sms(mobile, [sms_code, SMS_CODE_EXPIRE_TIME / 60], 1)
    except Exception as e:
        raise self.retry(exc=e)

    if result != 0:
        # 不是0，都是失败。要重试
        raise self.retry(exc=Exception('短信重试'))
